#include "ui.hpp"
#include "naplo.hpp"
#include "jatekmenet.hpp"
#include "hibakodok.hpp"
#include <iostream>
#include <cstdlib>

using namespace std;

/**
 * It is a beginning of a beautiful friendship
 */
int main(int argc, char** argv) {
    try {
        // Paraméterek értelmezése
        UI::programParameterek(argc, argv);
    } catch (int e) {
        // Ha para van, akkor meghalunk a hibakóddal
        exit(e);
    }
    // A napló és játékmenet objektumok létrehozása
    Naplo* log = new Naplo(UI::getMI(0), UI::getMI(1), UI::getSzelesseg(), UI::getMagassag());
    Jatekmenet* game = new Jatekmenet(UI::getSzelesseg(), UI::getMagassag(), UI::getMI(0), UI::getMI(1), log);
    try {
        // Játék lezavarása
        game->jatek();
    } catch (int e) {
#ifndef __SERVER
        // Kiírjuk a hibaüzenetet a kód alapján
        // TODO: A hibaüzenetek is #define-ból jöjjenek
        switch (e) {
            case MI_BETOLTES_HIBA0:
                cout << "Hiba a(z) " << UI::getMI(0) << " betöltése közben." << endl;
                break;
            case MI_BETOLTES_HIBA1:
                cout << "Hiba a(z) " << UI::getMI(1) << " betöltése közben." << endl;
                break;
            case MI_LEPES_HIBA0:
                cout << "Hiba a(z) " << UI::getMI(0) << " lépése közben." << endl;
                break;
            case MI_LEPES_HIBA1:
                cout << "Hiba a(z) " << UI::getMI(1) << " lépése közben." << endl;
                break;
            default:
                cout << "Programhiba." << endl;
                break;
        }
#endif
        return e;
    }
    return 0;
}

